﻿/**********************************************************************
 * @file   OperatorsGraphPreprocess.h
 * @brief  渲染操作器
 * @author BaGuijun (baguijun@163.com)
 * @date   2024-09-06
 *********************************************************************/
#ifndef _OperatorsGraphPreprocess_H__
#define _OperatorsGraphPreprocess_H__
#include "CFDPostOperatorsGUIAPI.h"

#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"

#include "CFDPost/CFDPostOperatorsInterface/CFDPostGraphEventOperator.h"

namespace GUI {
    class MainWindow;
}

namespace Interface {
    class PostGraphObjectManager;
    class FITKCFDPost3DManager;
    class FITKCFDPostLightManager;
};

namespace Comp {
    class FITKGraph3DWindowVTK;
}

namespace OperGUI {
    /**
     * @brief  渲染操作器
     * @author BaGuijun (baguijun@163.com)
     * @date   2024-09-06
     */
    class CFDPostOperatorsGUIAPI OperatorsGraphPreprocess : public EventOper::CFDPostGraphEventOperator {         //EventOper::GraphEventOperator
        Q_OBJECT;
      public:
        /**
         * @brief    构造函数
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-06
         */
        explicit OperatorsGraphPreprocess();
        /**
         * @brief    析构函数
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-06
         */
        ~OperatorsGraphPreprocess() = default;
        /**
         * @brief    更新全部
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-06
         */
        virtual void updateAll() override;
        /**
         * @brief    更新单个
         * @param[i] postDataID 后处理数据id
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-06
         */
        virtual void updateSingle(int postDataID) override;
        /**
         * @brief    更新是否显示
         * @param[i] postDataID 后处理数据id
         * @param[i] isShow     是否显示
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-11
         */
        virtual void updateShow(int postDataID, bool isShow) override;
        /**
         * @brief    更新灯光
         * @param[i] dataID     灯光ID
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-10-16
         */
        virtual void updateLight(int dataID) override;
        /**
         * @brief    强制刷新
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-09
         */
        virtual void reRender() override;
        // 清空所有内容，包括：结构树、数据和渲染的内容
        void clear();
      private slots:
        ;
        /**
         * @brief    主窗口关闭事件
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-12
         */
        void slotMainWindowClose();
      private:
        /**
         * @brief    获取渲染窗口对象
         * @return   FITKGraph3DWindowVTK*  渲染窗口
         * @author   BaGuijun (baguijun@163.com)
         * @date     2024-09-06
         */
        Comp::FITKGraph3DWindowVTK* getGraphWidget();
      private:
        /**
         * @brief  主窗口
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-09-06
         */
        GUI::MainWindow* _mainWin = nullptr;
        /**
         * @brief  渲染对象管理器
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-09-06
         */
        Interface::PostGraphObjectManager* _postGraphManager = nullptr;
        /**
         * @brief  渲染数据管理器
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-09-06
         */
        Interface::FITKCFDPost3DManager* _postDataManager = nullptr;
        /**
         * @brief  灯光数据管理器
         * @author BaGuijun (baguijun@163.com)
         * @date   2024-10-16
         */
        Interface::FITKCFDPostLightManager* _postListManager = nullptr;
    };

    Register2FITKOPeratorRepo(OperGraphPreprocess, OperatorsGraphPreprocess);

}  // namespace GUIOper

#endif
